﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace numer
{
    public partial class MainScreen : Form
    {
        #region 構造体
            
        #endregion

        #region 定数
        //各画面に割り振られている番号
        private const int MAINSCREEN = 1;
        private const int INPUTSCREEN = 2;
        private const int PLAYSCREEN = 3;
        private const int RESULTSCREEN = 4;

        private const string TARGRT_SEARCH = "ターゲット検索中...";
        private const string TARGRT_MISSING = "ターゲットが見つかりませんでした。";
        private const string TARGRT_FIND = "ターゲットが見つかりました。";

        #endregion

        #region 変数
        public Guid guid; 
        #endregion

        public int test;

        /// <summary>
        /// タイマー
        /// </summary>
        private System.Timers.Timer mTimer = new System.Timers.Timer();

        /// <summary>
        /// 秒数取得
        /// </summary>
        private int sec = 0;


        NumeR0nServer.Service1Client client = null;

        Thread thread = null;


        public MainScreen()
        {
            InitializeComponent();
        }


        private void MainScreen_Load(object sender, EventArgs e)
        {
            //DBソリューションのDBAccessorクラスのインスタンス生成
            DB.DBAccessor dbAccesse = new DB.DBAccessor();
            DB.DBLogic dbLogic = new DB.DBLogic();

            

            //dbLogic.ExecuteReader("", );
            
            
        }


        /// <summary>
        /// スタートボタン処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStart_Click(object sender, EventArgs e)
        {

            //ゲーム開始フラグ
            bool startFlg = true;
            this.lblTargetSarch.Text = TARGRT_SEARCH;


            //ターゲット検索ラベル
            this.lblTargetSarch.Visible = true;
            this.btnStart.Enabled = false;

            //Guidを割り当てる
            guid = Guid.NewGuid();

            //サーバ側のインスタンス生成
            client = new NumeR0nServer.Service1Client();
            //ターゲット検索処理
            client.SerchPlayer(guid.ToString());

            //スレッドを生成する M.Fukunishi 2015/01/31
            //thread = new Thread(new ThreadStart(searchLoop));
            searchLoop();

            // バックグラウンド・スレッドとする
            //thread.IsBackground = true;
            //thread.Start();

            //スレッドの終了
            //thread.Join();

            //もし帰り値がfalseであるなら、処理終了
            //if(!startFlg)
            //{
            //    //対戦相手不在
            //    this.lblTargetSarch.Text = TARGRT_MISSING;

            //    //スタートボタン活性化
            //    this.btnStart.Enabled = true;

            //    //処理終了
            //    return;
            //}

            //対戦相手確立
            //this.lblTargetSarch.Text = TARGRT_FIND;

            ////画面遷移3秒待つ
            //Thread threadScreenTransition = new Thread(new ThreadStart(WaitScreenTransition));
            //threadScreenTransition.Start();
            ////スレッドの終了
            //threadScreenTransition.Join();

            //string testSql = @"DB.SQL.Insert_User_Table.sql";
            //DB.DBLogic.ExecuteNonQuery(testSql);

            //画面遷移
            //Program.FormContainer.Change(INPUTSCREEN);


        }


        public static byte[] GetBytes(string Codepage_Name, string Source_Str_Data)
        {
            System.IO.MemoryStream mStr = new System.IO.MemoryStream();
            // エンコーティング用オブジェクト（文字コードを指定するもの）を作成
            System.Text.Encoding encod = System.Text.Encoding.GetEncoding(Codepage_Name);
            // ストリームライターの生成
            System.IO.StreamWriter sw = new System.IO.StreamWriter(mStr, encod);
            // データーの書き込み
            sw.Write(Source_Str_Data);
            //mStr.Flush(); // フラッシュ(強制書き出し)
            // ストリームライターのクローズ
            sw.Close();
            byte[] Destination_Bytes = mStr.ToArray();
            return Destination_Bytes;
        }



        public static string GetString(string Codepage_Name, byte[] Source_Bytes_Data)
        {
            System.IO.MemoryStream mStr = new System.IO.MemoryStream(Source_Bytes_Data);
            // エンコーティング用オブジェクト（文字コードを指定するもの）を作成
            System.Text.Encoding encod = System.Text.Encoding.GetEncoding(Codepage_Name);
            // ストリームリーダーの生成
            System.IO.StreamReader sr = new System.IO.StreamReader(mStr, encod);
            // データーの読み込み
            string Destination_Str = sr.ReadToEnd();
            // ストリームリーダーのクローズ
            sr.Close();
            return Destination_Str;
        }

        //guidを設定してサーバへ送る 2015/01/31
        private void SendGUID()
        {
            //guidを設定する
            Guid guidValue = Guid.NewGuid();
            Console.WriteLine(guidValue.ToString());

            //SPメソッドを呼び出す

            //画面にプログレスバーを表示
        }

        //非同期処理を実行する 2015/01/31
        private void BeginAsyncWork(AsyncCallback callback)
        {
            Action async = AsyncWork;
            async.BeginInvoke(callback, null);
        }

        //非同期処理 M.Fukunishi 2015/01/31
        private void AsyncWork()
        {
            //GUIDを送信
            SendGUID();
        }

        //コールバックにより画面遷移 2015/01/31
        private void Callback(IAsyncResult r)
        {
            //画面遷移
            //Program.FormContainer.Change(INPUTSCREEN);
        }

        private void searchLoop()
        {

            //System.Threading.Thread.Sleep(5000);

            searchTimer.Interval = 1000;
            searchTimer.Start();
            

            //var client = new NumeR0nServer.Service1Client();
            //bool text = client.SerchPlayer();
            //client.Close();

            //画面遷移
            //Program.FormContainer.Change(INPUTSCREEN);

        }


        /// <summary>
        /// 画面遷移
        /// </summary>
        private void WaitScreenTransition()
        {

            //searchTimer.Start();

        }

        /// <summary>
        /// タイマー処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void searchTimer_Tick(object sender, EventArgs e)
        {

            Dictionary<string, object> userList = new Dictionary<string, object>();


            if (sec != 60)
            {
                sec++;
                lblTargetSarch.Text = string.Format("ターゲット検索中：{0} 秒経過", sec);

                //client = new NumeR0nServer.Service1Client();
                //client.GetUserData();

                //var client = new NumeR0nServer.Service1Client();
                //var text = client.GetData(12345);
                var num = client.GetUserData();


                //仮数値10(num番号の判定により遷移条件決定)
                if (sec == 10)
                {
                    //画面遷移
                    Program.FormContainer.Change(INPUTSCREEN);
                    //タイマー停止
                    searchTimer.Stop();
                }
            }
            else
            {

                lblTargetSarch.Text = string.Format("ターゲットが見つかりませんでした。");
                //タイマー停止
                searchTimer.Stop();
            }

        }




    }
}
